'use strict';
/*! main.js - v0.1.1
 * http://admindesigns.com/
 * Copyright (c) 2013 Admin Designs;*/

/* Demo theme functions. Required for
 * Settings Pane and misc functions */
var Demo = function () {

    // Demo AdminForm Functions
    var runDemoForms = function () {

        // Prevents directory response when submitting a demo form
        $('.admin-form').on('submit', function (e) {

            if ($('body.timeline-page').length || $('body.admin-validation-page').length) {
                return;
            }

            e.preventDefault;
            alert('Your form has submitted!');
            return false;

        });
    };

    // Demo Header Functions
    var runDemoTopbar = function () {

        // Init jQuery Multi-Select
        if ($("#topbar-multiple").length) {
            $('#topbar-multiple').multiselect({
                buttonClass: 'btn btn-default btn-sm ph15',
                dropRight: true
            });
        }
    };

    // DEMO FUNCTIONS - primarily trash
    var runDemoSettings = function () {

        if ($('#skin-toolbox').length) {

            // Toggles Theme Settings Tray
            $('#skin-toolbox .panel-heading').on('click', function () {
                $('#skin-toolbox').toggleClass('toolbox-open');
            });
            // Disable text selection
            $('#skin-toolbox .panel-heading').disableSelection();

            // Cache component elements
            var Breadcrumbs = $('#topbar');
            var Sidebar = $('#sidebar_left');
            var Header = $('.navbar');
            var Branding = Header.children('.navbar-branding');

            // Possible Component Skins
            var headerSkins = "bg-primary bg-success bg-info bg-warning bg-danger bg-alert bg-system bg-dark bg-light";
            var sidebarSkins = "sidebar-light light dark";

            // Theme Settings
            var settingsObj = {
                // 'headerTone': true,
                'headerSkin': 'bg-light',
                'sidebarSkin': 'sidebar-default',
                'headerState': 'navbar-fixed-top',
                'breadcrumbState': 'relative',
                'breadcrumbHidden': 'visible'
            };

            // Local Storage Theme Key
            var themeKey = 'admin-settings';

            // Local Storage Theme Get
            var themeGet = localStorage.getItem(themeKey);

            // Set new key if one doesn't exist
            if (themeGet === null) {
                localStorage.setItem(themeKey, JSON.stringify(settingsObj));
                themeGet = localStorage.getItem(themeKey);
            }

            // Restore Theme Settings from Local Storage Key
            (function () {

                var settingsParse = JSON.parse(themeGet);
                settingsObj = settingsParse;

                settingsParse.headerSkin = 'bg-dark';

                $.each(settingsParse, function (i, e) {
                    switch (i) {
                        case 'headerSkin':
                            Header.removeClass(headerSkins).addClass(e);
                            Branding.removeClass(headerSkins).addClass(e + ' dark');

                            // if (settingsObj['headerTone'] === true) {
                            // 	Branding.addClass('dark');
                            // }

                            if (e === "bg-light") {
                                Branding.removeClass(headerSkins);
                            }
                            else {
                                Branding.removeClass(headerSkins).addClass(e);
                            }

                            $('#toolbox-header-skin input[value="bg-light"]').prop('checked', false);
                            $('#toolbox-header-skin input[value="' + e + '"]').prop('checked', true);
                            break;
                        case 'sidebarSkin':
                            Sidebar.removeClass(sidebarSkins).addClass(e);
                            $('#toolbox-sidebar-skin input[value="bg-light"]').prop('checked', false);
                            $('#toolbox-sidebar-skin input[value="' + e + '"]').prop('checked', true);
                            break;
                        case 'headerState':
                            if (e === "navbar-fixed-top") {
                                Header.addClass('navbar-fixed-top');
                                $('#header-option').prop('checked', true);
                            } else {
                                Header.removeClass('navbar-fixed-top');
                                $('#header-option').prop('checked', false);
                            }
                            break;
                        case 'sidebarState':
                            if (e === "affix") {
                                Sidebar.addClass('affix');
                                // Recaculate nano scroller dimensions after affix change
                                $(".nano").nanoScroller({
                                    preventPageScrolling: true
                                });
                                $('#sidebar-option').prop('checked', true);
                            } else {
                                Sidebar.removeClass('affix');
                                $('#sidebar-option').prop('checked', false);
                            }
                            break;
                        case 'breadcrumbState':
                            if (e === "affix") {
                                Breadcrumbs.addClass('affix');
                                $('#breadcrumb-option').prop('checked', true);
                            } else {
                                Breadcrumbs.removeClass('affix');
                                $('#breadcrumb-option').prop('checked', false);
                            }
                            break;
                        case 'breadcrumbHidden':
                            if (e === "hidden") {
                                Breadcrumbs.addClass('hidden');
                                $('#breadcrumb-hidden').prop('checked', true);
                            } else {
                                Breadcrumbs.removeClass('hidden');
                                $('#breadcrumb-hidden').prop('checked', false);
                            }
                            break;
                    }
                });

            })();

            // Header Skin Switcher
            $('#toolbox-header-skin input').on('click', function () {
                var This = $(this);
                var Val = This.val();
                var ID = This.attr('id');

                // if (ID === "headerTwoTone" && This.prop("checked")) { 
                //  settingsObj['headerTone'] = true;
                // 	localStorage.setItem(themeKey, JSON.stringify(settingsObj));
                // 	return;
                // }
                // else {
                //  settingsObj['headerTone'] = false;
                // 	localStorage.setItem(themeKey, JSON.stringify(settingsObj));

                // }

                // Swap Header Skin
                Header.removeClass(headerSkins).addClass(Val);
                Branding.removeClass(headerSkins).addClass(Val + ' dark');

                // Save new Skin to Settings Key
                settingsObj['headerSkin'] = Val;
                localStorage.setItem(themeKey, JSON.stringify(settingsObj));
            });

            // Sidebar Skin Switcher
            $('#toolbox-sidebar-skin input').on('click', function () {
                var Val = $(this).val();

                // Swap Sidebar Skin
                Sidebar.removeClass(sidebarSkins).addClass(Val);

                // Save new Skin to Settings Key
                settingsObj['sidebarSkin'] = Val;
                localStorage.setItem(themeKey, JSON.stringify(settingsObj));
            });

            // Fixed Header Switcher
            $('#header-option').on('click', function () {
                var headerState = "navbar-fixed-top";

                if (Header.hasClass('navbar-fixed-top')) {
                    Header.removeClass('navbar-fixed-top');
                    headerState = "relative";

                    // Remove Fixed Sidebar option if navbar isnt fixed
                    Sidebar.removeClass('affix');
                    $('#sidebar-option').parent('.checkbox-custom').addClass('checkbox-disabled').end().prop('checked', false).attr('disabled', true);
                    settingsObj['sidebarState'] = "";
                    localStorage.setItem(themeKey, JSON.stringify(settingsObj));

                    // Remove Fixed Breadcrumb option if navbar isnt fixed
                    Breadcrumbs.removeClass('affix');
                    $('#breadcrumb-option').parent('.checkbox-custom').addClass('checkbox-disabled').end().prop('checked', false).attr('disabled', true);
                    settingsObj['breadcrumbState'] = "";
                    localStorage.setItem(themeKey, JSON.stringify(settingsObj));

                } else {
                    Header.addClass('navbar-fixed-top');
                    headerState = "navbar-fixed-top";
                    // Enable fixed sidebar and breadcrumb options
                    $('#sidebar-option').parent('.checkbox-custom').removeClass('checkbox-disabled').end().attr('disabled', false);
                    $('#breadcrumb-option').parent('.checkbox-custom').removeClass('checkbox-disabled').end().attr('disabled', false);
                }

                // Save new setting to Settings Key
                settingsObj['headerState'] = headerState;
                localStorage.setItem(themeKey, JSON.stringify(settingsObj));
            });

            // Fixed Sidebar Switcher
            $('#sidebar-option').on('click', function () {
                var sidebarState = "";

                if (Sidebar.hasClass('affix')) {
                    Sidebar.removeClass('affix');
                    // Remove left over inline styles from nanoscroller plugin
                    $(".nano").nanoScroller({flash: true});
                    $(".nano-content").attr('style', '');
                    sidebarState = "";
                } else {
                    Sidebar.addClass('affix');
                    // Recaculate nano scroller dimensions after affix change
                    $(".nano.affix").nanoScroller({
                        preventPageScrolling: true
                    });
                    sidebarState = "affix";
                }

                $(window).trigger('resize');

                // Save new setting to Settings Key
                settingsObj['sidebarState'] = sidebarState;
                localStorage.setItem(themeKey, JSON.stringify(settingsObj));
            });

            // Fixed Breadcrumb Switcher
            $('#breadcrumb-option').on('click', function () {

                var breadcrumbState = "";

                if (Breadcrumbs.hasClass('affix')) {
                    Breadcrumbs.removeClass('affix');
                    breadcrumbState = "";
                } else {
                    Breadcrumbs.addClass('affix');
                    breadcrumbState = "affix";
                }

                // Save new setting to Settings Key
                settingsObj['breadcrumbState'] = breadcrumbState;
                localStorage.setItem(themeKey, JSON.stringify(settingsObj));
            });

            // Hidden Breadcrumb Switcher
            $('#breadcrumb-hidden').on('click', function () {
                var breadcrumbState = "";

                if (Breadcrumbs.hasClass('hidden')) {
                    Breadcrumbs.removeClass('hidden');
                    breadcrumbState = "";
                } else {
                    Breadcrumbs.addClass('hidden');
                    breadcrumbState = "hidden";
                }

                // Save new setting to Settings Key
                settingsObj['breadcrumbHidden'] = breadcrumbState;
                localStorage.setItem(themeKey, JSON.stringify(settingsObj));
            });

            // Clear local storage button and confirm dialog
            $("#clearLocalStorage").on('click', function () {
                (new PNotify({
                    title: 'Are you sure?',
                    hide: false,
                    type: 'dark',
                    addclass: "mt50",
                    buttons: {
                        closer: false,
                        sticker: false
                    },
                    confirm: {
                        confirm: true,
                        buttons: [{
                                text: "Yup, Do it.",
                                addClass: "btn-sm btn-info"
                            }, {
                                text: "Cancel",
                                addClass: "btn-sm btn-danger"
                            }]
                    },
                    history: {
                        history: false
                    }
                })).get().on('pnotify.confirm', function () {
                    localStorage.clear();
                    location.reload();
                }).on('pnotify.cancel', function () {
                    return;
                });

            });
        }
    };

    var runDemoCache = function () {

        $(window).load(function () {

            // List of all available JS files. We're going to attempt to
            // cache them all after the first page has finished loading.
            // This is for DEMO purposes ONLY
            var scripts = {
                // HIGH PRIORITY - Images
                image1: 'assets/img/stock/1.jpg',
                image2: 'assets/img/stock/2.jpg',
                image3: 'assets/img/stock/3.jpg',
                image4: 'assets/img/stock/4.jpg',
                image5: 'assets/img/stock/5.jpg',
                bg1: 'assets/img/patterns/backgrounds/1.jpg',
                // HIGH PRIORITY - Admin Tools Assets
                adminform: 'assets/admin-tools/admin-forms/css/admin-forms.css',
                adminpanel: 'assets/admin-tools/admin-plugins/admin-panels/adminpanels.css',
                adminmodal: 'assets/admin-tools/admin-plugins/admin-modal/adminmodal.css',
                admindock: 'assets/admin-tools/admin-plugins/admin-dock/dockmodal.css'
            };

            var cacheCheck = function (o) {

                // Local Storage Theme Key
                var cacheKey = 'cache-observes';

                // Local Storage Theme Get
                var cacheGet = localStorage.getItem(cacheKey);

                // Set new key if one doesn't exist
                if (cacheGet === null) {
                    localStorage.setItem(cacheKey, "");
                    cacheGet = localStorage.getItem(cacheKey);
                }

                // Parse LocalStorage data
                // var checkedCache = JSON.parse(cacheGet);

                // Do something with returned data
                // console.log('Key contains: ', cacheGet);

                $.each(o, function (i, p) {

                    if (localStorage.getItem(i) !== 'cached') {
                        $.ajax({
                            url: p,
                            cache: true,
                            success: function (data) {
                                localStorage.setItem(i, 'cached');
                                console.log(localStorage.getItem(i));
                            }
                        });

                    } else {
                    }
                });
            };
            // DISABLED BY DEFAULT
            // cacheCheck(scripts);
        });
    };

    var runSidebarVector = function () {

        // Data set
        var mapData = [900, 700, 350, 500];

        var sidebarMap = $('#sidebar-right-map');

        // Init Jvector Map
        sidebarMap.vectorMap({
            map: 'us_lcc_en',
            //regionsSelectable: true,
            backgroundColor: 'transparent',
            series: {
                markers: [{
                        attribute: 'r',
                        scale: [3, 7],
                        values: mapData
                    }]
            },
            regionStyle: {
                initial: {
                    fill: '#E5E5E5'
                },
                hover: {
                    "fill-opacity": 0.3
                }
            },
            markers: [{
                    latLng: [37.78, -122.41],
                    name: 'San Francisco,CA'
                }, {
                    latLng: [36.73, -103.98],
                    name: 'Texas,TX'
                }, {
                    latLng: [38.62, -90.19],
                    name: 'St. Louis,MO'
                }, {
                    latLng: [40.67, -73.94],
                    name: 'New York City,NY'
                }],
            markerStyle: {
                initial: {
                    fill: '#a288d5',
                    stroke: '#b49ae0',
                    "fill-opacity": 1,
                    "stroke-width": 10,
                    "stroke-opacity": 0.3,
                    r: 3
                },
                hover: {
                    stroke: 'black',
                    "stroke-width": 2
                },
                selected: {
                    fill: 'blue'
                },
                selectedHover: {}
            }
        });

        // Manual code to alter the Vector map plugin to 
        // allow for individual coloring of countries
        var states = ['US-CA', 'US-TX', 'US-MO', 'US-NY'];
        var colors = [bgPrimaryLr, bgInfoLr, bgWarningLr, bgAlertLr];
        var colors2 = [bgPrimary, bgInfo, bgWarning, bgAlert];

        $.each(states, function (i, e) {
            $("path[data-code=" + e + "]", sidebarMap).css({
                fill: colors[i]
            });
        });
        sidebarMap.find('.jvectormap-marker').each(function (i, e) {
            $(e).css({
                fill: colors2[i],
                stroke: colors2[i]
            });
        });
    };

    var runFullscreenDemo = function () {

        // Fullscreen Functionality
        var screenCheck = $.fullscreen.isNativelySupported();

        // Attach handler to navbar fullscreen button
        $('.request-fullscreen').click(function () {

            // Check for fullscreen browser support
            if (screenCheck) {
                if ($.fullscreen.isFullScreen()) {
                    $.fullscreen.exit();
                } else {
                    $('html').fullscreen({
                        overflow: 'visible'
                    });
                }
            } else {
                alert('Your browser does not support fullscreen mode.');
            }
        });
    };

    return {
        init: function () {
            runDemoForms();
            runDemoTopbar();
            runDemoSettings();
            runDemoCache();
            runSidebarVector();
            runFullscreenDemo();
        }
    };
}();

